/**
 * Copyright (C) 2011 Domenico Briganti <dometec@gmail.com>
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *         http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package it.webrules.deploymanager.webapp.controller;

import it.webrules.deploymanager.core.config.ConfigurationException;
import it.webrules.deploymanager.core.dy.build.CIException;
import it.webrules.deploymanager.core.dy.deploy.AvailableServerException;
import it.webrules.deploymanager.core.dy.deploy.DeployException;
import it.webrules.deploymanager.core.dy.repos.RepositoryException;
import it.webrules.deploymanager.core.st.scm.SCMException;
import it.webrules.deploymanager.webapp.auth.AuthenticatedUser;
import it.webrules.deploymanager.webapp.auth.DMPrincipal;
import it.webrules.deploymanager.webapp.service.ConfigurationService;
import it.webrules.deploymanager.webapp.service.CoreService;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintStream;
import java.nio.charset.Charset;

import javax.inject.Inject;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;

import com.sun.jersey.spi.resource.PerRequest;

@PerRequest
@Path("services/operation")
public class OperationController extends BaseController {

	@AuthenticatedUser
	@SuppressWarnings("unused")
	private DMPrincipal user;

	@Inject
	private ConfigurationService configurationService;

	@Inject
	private CoreService coreService;

	@Inject
	public OperationController() {
	}

	@GET
	@Path("{subResources:.*}/listdeployablerelease")
	// @ApplicationRolesAllowed({ Constants.ROLE_USER })
	@Produces(MediaType.APPLICATION_JSON)
	public Response getListDeployableRelease(@PathParam("subResources") String path) throws FileNotFoundException {

		try {

			File file = configurationService.getFileFromPath(path);
			Object resp = coreService.getListDeployableRelease(file);
			return Response.ok(resp).build();

		} catch (ConfigurationException | CIException | RepositoryException | AvailableServerException | DeployException | SCMException e) {

			ByteArrayOutputStream out = new ByteArrayOutputStream();
			PrintStream printStream = new PrintStream(out);
			e.printStackTrace(printStream);
			printStream.close();

			return Response.status(Status.INTERNAL_SERVER_ERROR).entity(new String(out.toByteArray(), Charset.defaultCharset()))
					.type(MediaType.TEXT_PLAIN).build();

		}

	}

}
